/**
 * 更新 sh_pattern 表中的 file_name 字段
 * 从 pattern_file 字段中提取文件名（最后一个/后面的部分）
 */

// 导入云数据库
const db = uniCloud.database()

async function updatePatternFileNames() {
	console.log('开始更新 sh_pattern 表中的 file_name 字段...')
	
	try {
		// 1. 先获取所有没有 file_name 字段的记录
		const collection = db.collection('sh_pattern')
		
		// 分批处理，每次处理100条记录
		const batchSize = 1000
		let skip = 0
		let totalUpdated = 0
		let hasMore = true
		
		while (hasMore) {
			console.log(`正在处理第 ${skip + 1} - ${skip + batchSize} 条记录...`)
			
			// 获取一批数据
			const result = await collection
				.where({
					pattern_file: db.command.exists(true), // pattern_file 字段存在
					file_name: db.command.exists(false)     // file_name 字段不存在
				})
				.skip(skip)
				.limit(batchSize)
				.get()
			
			if (result.data.length === 0) {
				hasMore = false
				break
			}
			
			// 批量更新操作
			const updatePromises = result.data.map(async (item) => {
				try {
					// 从 pattern_file 中提取文件名
					let fileName = ''
					if (item.pattern_file && typeof item.pattern_file === 'string') {
						// 提取最后一个 / 后面的文件名
						const lastSlashIndex = item.pattern_file.lastIndexOf('/')
						if (lastSlashIndex !== -1) {
							fileName = item.pattern_file.substring(lastSlashIndex + 1)
						} else {
							// 如果没有 /，整个字符串就是文件名
							fileName = item.pattern_file
						}
					}
					
					// 更新记录
					if (fileName) {
						await collection.doc(item._id).update({
							file_name: fileName
						})
						console.log(`✅ 更新成功 - ID: ${item._id}, 文件名: ${fileName}`)
						return true
					} else {
						console.log(`⚠️ 跳过 - ID: ${item._id}, pattern_file 为空或无效`)
						return false
					}
				} catch (error) {
					console.error(`❌ 更新失败 - ID: ${item._id}, 错误:`, error)
					return false
				}
			})
			
			// 等待所有更新完成
			const updateResults = await Promise.all(updatePromises)
			const successCount = updateResults.filter(result => result === true).length
			totalUpdated += successCount
			
			console.log(`本批次更新了 ${successCount}/${result.data.length} 条记录`)
			
			skip += batchSize
			
			// 如果返回的记录数少于批次大小，说明没有更多数据了
			if (result.data.length < batchSize) {
				hasMore = false
			}
		}
		
		console.log(`🎉 更新完成！总共更新了 ${totalUpdated} 条记录`)
		
		// 验证更新结果
		const verifyResult = await collection
			.where({
				pattern_file: db.command.exists(true),
				file_name: db.command.exists(false)
			})
			.count()
		
		console.log(`验证结果：还有 ${verifyResult.total} 条记录未更新 file_name 字段`)
		
		return {
			success: true,
			totalUpdated: totalUpdated,
			remainingCount: verifyResult.total
		}
		
	} catch (error) {
		console.error('❌ 更新过程中发生错误:', error)
		return {
			success: false,
			error: error.message
		}
	}
}

// 测试函数 - 先检查几条记录的数据格式
async function testPatternFileFormat() {
	console.log('测试数据格式...')
	
	const db = uniCloud.database()
	const collection = db.collection('sh_pattern')
	
	const result = await collection
		.field({
			_id: true,
			pattern_file: true
		})
		.limit(5)
		.get()
	
	console.log('示例数据:')
	result.data.forEach((item, index) => {
		const fileName = item.pattern_file ? item.pattern_file.substring(item.pattern_file.lastIndexOf('/') + 1) : ''
		console.log(`${index + 1}. ID: ${item._id}`)
		console.log(`   pattern_file: ${item.pattern_file}`)
		console.log(`   提取的 file_name: ${fileName}`)
		console.log('---')
	})
}

// 导出函数供云函数调用
module.exports = {
	updatePatternFileNames,
	testPatternFileFormat
}

// 如果直接运行此脚本
if (require.main === module) {
	// 先测试数据格式
	testPatternFileFormat().then(() => {
		console.log('\n是否继续执行更新？(请在云函数中调用 updatePatternFileNames 函数)')
	}).catch(console.error)
}